package com.yf.tool.config;

import com.yf.converter.chat.ToolCallResultDescConverter;
import com.yf.tool.ClientEnvironmentInfoTool;
import com.yf.tool.CurrentTimeTool;
import com.yf.tool.UserIdentityInfoTool;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.function.FunctionToolCallback;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 自定义 Ai 工具相关配置
 *
 * @author : YiFei
 * @since : 2025/7/5 13:02
 */
@Configuration
public class AiToolConfig {

    /**
     * 获取用户身份信息工具回调
     *
     * @param userIdentityInfoTool 用户身份信息工具
     * @return ToolCallback
     */
    @Bean("userIdentityInfoToolCallback")
    public ToolCallback userIdentityInfo(UserIdentityInfoTool userIdentityInfoTool) {
        return FunctionToolCallback
                .builder("custom_user_identity", userIdentityInfoTool)
                .description("获取用户身份信息，包括用户名、昵称、性别、角色、邮箱和电话号码等")
                .inputType(Void.class)
                .toolCallResultConverter(new ToolCallResultDescConverter())
                .build();
    }

    /**
     * 获取客户端环境信息工具回调
     */
    @Bean("clientEnvironmentInfoToolCallback")
    public ToolCallback clientEnvironmentInfoToolCallback(ClientEnvironmentInfoTool clientEnvironmentInfoTool) {
        return FunctionToolCallback
                .builder("custom_client_environment_info", clientEnvironmentInfoTool)
                .description("获取客户端环境信息，包括IP地址、地理位置、浏览器和操作系统等")
                .inputType(Void.class)
                .toolCallResultConverter(new ToolCallResultDescConverter())
                .build();
    }

    /**
     * 获取当前时间工具回调
     *
     * @return ToolCallback
     */
    @Bean("currentTimeToolsCallback")
    public ToolCallback currentTimeTools(CurrentTimeTool currentTimeTool) {
        return FunctionToolCallback
                .builder("custom_current_time", currentTimeTool)
                .description("以 ISO 8601 格式检索当前服务器时间，其中包含时区信息。")
                .inputType(Void.class)
                .build();
    }

//    /**
//     * 获取星座运势信息工具回调
//     *
//     * @param horoscopeTool 星座运势信息工具
//     * @return ToolCallback
//     */
//    @Bean("horoscopeToolCallback")
//    public ToolCallback horoscopeToolCallback(HoroscopeInfoTool horoscopeTool) {
//        return FunctionToolCallback
//                .builder("custom_horoscope_info", horoscopeTool)
//                .description("""
//                        Retrieves detailed horoscope information for specific zodiac signs.
//                        Provides comprehensive fortune data including:
//                        - Daily/Weekly/Monthly forecasts
//                        - Lucky numbers, colors and compatible constellations
//                        - Numerical ratings (1-5) and percentage indexes
//                        - Activity recommendations and warnings
//                        - Detailed interpretations for love, career, wealth and health
//                        """)
//                .inputType(WeatherRequest.class)
//                .toolCallResultConverter(new ToolCallResultDescConverter())
//                .build();
//    }
//    /**
//     * 通过内容生成二维码
//     *
//     * @param qrTool 生成二维码工具
//     * @return ToolCallback
//     */
//    @Bean("qrToolsCallback")
//    public ToolCallback qrToolsCallback(QrTool qrTool) {
//        return FunctionToolCallback
//                .builder("custom_qr_code", qrTool)
//                .description("根据文本内容或URL生成二维码，返回SVG格式的Base64编码字符串。")
//                .inputType(String.class)
//                .toolMetadata(ToolMetadata.builder()
//                        .returnDirect(true)
//                        .build())
//                .build();
//    }

//    /**
//     * 获取当前天气信息工具回调
//     *
//     * @param weatherTool 天气信息工具
//     * @return ToolCallback
//     */
//    @Bean("currentWeatherToolsCallback")
//    public ToolCallback currentWeatherTools(WeatherTool weatherTool) {
//        return FunctionToolCallback
//                .builder("custom_current_weather", weatherTool)
//                .description("""
//                        Get real-time weather in the user's area
//                        Returns comprehensive weather details including:
//                        - Location information (city)
//                        - Current weather conditions
//                        - Temperature metrics
//                        - Wind speed and direction
//                        - Air quality index
//                        - Relevant activity suggestions
//                        """)
//                .inputType(Void.class)
//                .toolCallResultConverter(new ToolCallResultDescConverter())
//                .build();
//    }
}
